package common.utils.aliyun;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;

import java.net.URL;
import java.util.Date;

public class OSSPresignedUrlGenerator {

    // 阿里云 OSS 配置
    private static final String ENDPOINT = "oss-cn-hangzhou.aliyuncs.com"; // 替换为你的 OSS Endpoint
    private static final String ACCESS_KEY_ID = "LTAI5tS1ukNoo1w248P1CS49"; // 替换为你的 AK
    private static final String ACCESS_KEY_SECRET = "BLh62orKlc3zEVDz6cOAOXbt9fkGxe"; // 替换为你的 SK
    private static final String BUCKET_NAME = "xpqh-mjs"; // 替换为你的 Bucket 名称

    public static void main(String[] args) {
        // 1. 初始化 OSS 客户端
        OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);

        // 2. 设置要访问的文件路径（Object Key）
        String objectKey = "avatar.jpg"; // 替换为你的文件路径

        // 3. 生成签名 URL（有效期 1 小时）
        String signedUrl = generatePresignedUrl(ossClient, BUCKET_NAME, objectKey, 3600);
        System.out.println("签名URL: " + signedUrl);

        // 4. 关闭 OSS 客户端
        ossClient.shutdown();
    }

    /**
     * 生成私有文件的临时访问 URL
     * @param ossClient OSS 客户端
     * @param bucketName Bucket 名称
     * @param objectKey 文件路径（如 "images/example.jpg"）
     * @param expireSeconds 过期时间（秒）
     * @return 签名 URL
     */
    public static String generatePresignedUrl(OSS ossClient, String bucketName, String objectKey, long expireSeconds) {
        // 计算过期时间
        Date expiration = new Date(System.currentTimeMillis() + expireSeconds * 1000);

        // 创建签名请求
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectKey);
        request.setExpiration(expiration);

        // 生成签名 URL
        URL signedUrl = ossClient.generatePresignedUrl(request);
        return signedUrl.toString();
    }
}
